<?php
require_once 'protoweb/usuarios_protoweb.php';

/**
 * @package sisco
 * @subpackage controller
 */
class Usuarios extends Usuarios_protoweb
{
    public function create()
    {
        // chequeo y obtengo el usuario loggeado
        $data['logueado'] = $this->getUsuarioLogueado();

        // valido permisos
        $gruposValidos = array();
        // ej. array('venta','logistica','contable','directivo');
        $this->validarPermisos($data['logueado'], $gruposValidos);

        // Get an empty object
        $data['usuario'] = new Usuario();
        
        // Seleccionar secciones
        $data['sidebar_usuarios_create'] = 'active';
        
        // Message Handler
        $data['msg'] = new PwMsgHandler();

        // prepare object attributes
        $this->createPrepare($data);

        // if posting, try to save the new object
        if ($this->input->server('REQUEST_METHOD') === 'POST') {
            $this->create_save($data);
        }

        // load view
        $this->smartyview->render('usuario_create.html', $data);

    } // function create

    private function create_save($data) 
    {
        // assignCreatePost is defined on parent class and 
        // will assign all posting values to your attributes's class 
        // based on purposes definitions
        if ($this->assignCreatePost($data)) {

            // You could customize attributes here
			$data['usuario']->password = sha1($data['usuario']->password);
            
            // Saving Object (feel free to edit)
            if ($this->saveEntity($data)) { 
            
                // post processing object attributes
                $this->afterCreateSuccess($data);

                // Show success message in next view
                $data['msg']->success = 'Usuario creado correctamente';
                $data['msg']->persistSuccess();

                // redirects to update method
                redirect(base_url() . 'usuarios/update/' . $data['usuario']->id . '/');
            }
            else { 
                
                // revert attributes changes if necesary
                $this->revertOnCreateError($data);

                // Append model's errors
                $data['msg']->error .= $data['usuario']->error->string;
            }
        } // if assignCreatePost
    } // function create_save
    
    public function update($id)
    {
        // chequeo y obtengo el usuario loggeado
        $data['logueado'] = $this->getUsuarioLogueado();

        // valido permisos
        $gruposValidos = array();
        // ej. array('venta','logistica','contable','directivo');
        $this->validarPermisos($data['logueado'], $gruposValidos);

        // get object to edit
        $data['usuario'] = new Usuario($id);
        
        // Seleccionar secciones
        $data['sidebar_usuarios_browse'] = 'active';
        
        // Message Handler
        $data['msg'] = new PwMsgHandler();

        // prepare object attributes
        $this->updatePrepare($data);

        // if posting, try to save modifications
        if ($this->input->server('REQUEST_METHOD') === 'POST') {
            $this->update_save($data);
        }

        // load view
        $this->smartyview->render('usuario_update.html', $data);

    } // function update

    public function profile()
    {
        // chequeo y obtengo el usuario loggeado
        $data['logueado'] = $this->getUsuarioLogueado();

        // valido permisos
        $gruposValidos = array();
        // ej. array('venta','logistica','contable','directivo');
        $this->validarPermisos($data['logueado'], $gruposValidos);

        // get object to edit
        $data['usuario'] = new Usuario($data['logueado']->id);
        
        // Seleccionar secciones
        //$data['sidebar_usuarios_browse'] = 'active';
        
        // Message Handler
        $data['msg'] = new PwMsgHandler();

        // prepare object attributes
        $this->updatePrepare($data);

        // if posting, try to save modifications
        if ($this->input->server('REQUEST_METHOD') === 'POST') {
            $this->update_save($data);
        }

        // load view
        $this->smartyview->render('usuario_actualizar_perfil.html', $data);

    } // function actualizar_perfil
    
    private function update_save($data) 
    {
        // assignUpdatePost is defined on parent class and 
        // will assign all posting values to your attributes's class 
        // based on purposes definitions
        if ($this->assignUpdatePost($data)) {

            // You could customize attributes here

            // Saving Object and its relationships (feel free to edit)
            if ($this->saveEntity($data)) { 
            
                // post processing object attributes
                $this->afterUpdateSuccess($data);

                // Show success message in next view
                $data['msg']->success = 'Usuario actualizado correctamente';
                $data['msg']->persistSuccess();

                // redirects to edit
                redirect(base_url() . 'usuarios/update/' . $data['usuario']->id . '/');
            }
            else { 
                // revert attributes changes if necesary
                $this->revertOnUpdateError($data);

                // Append model's errors
                $data['msg']->error .= $data['usuario']->error->string;
            }
        } // if assignUpdatePost
    } // function update_save


    public function index()
    {
        redirect(base_url() . 'usuarios/login/0');
        //$this->login();
    } // index

    public function home()
    {
        // chequeo y obtengo el usuario loggeado
        $data['logueado'] = $this->getUsuarioLogueado();
        
        // valido permisos
        $urlPermisosInvalidos = base_url() . 'usuarios/dashboard/'; 
        $permisosRequeridos   = array();
        // Ejemplo: 
        // $permisosRequeridos = array('tickets-crear','tickets');

        $this->validarPermisos($data['logueado'], $permisosRequeridos, $urlPermisosInvalidos);
        
        // temporalmente redirecciono a otro lado
        redirect(base_url() . 'remitos/browse/');
        
        // Cargo la vista
        //$this->smartyview->render('usuario_home.html',$data);
    } // home
    
    public function delete($id)
    {
        // chequeo y obtengo el usuario loggeado
        $data['logueado'] = $this->getUsuarioLogueado();

        // valido permisos
        $urlPermisosInvalidos = base_url() . 'usuarios/dashboard/'; 
        $permisosRequeridos   = array();
        // Ejemplo: 
        // $permisosRequeridos = array('tickets-crear','tickets');

        $this->validarPermisos($data['logueado'], $permisosRequeridos, $urlPermisosInvalidos);

        // get object to delete
        $data['usuario'] = new Usuario($id);
        
        if ($data['usuario']->delete()) {

            // delete related actions based on purpose
            $this->afterDeleteSuccess($data);

            // Show success message in next view
            $data['msg']          = new PwMsgHandler();
            $data['msg']->success = 'usuario successfully deleted';
            $data['msg']->persistSuccess();

            // redirects to create a new object
            redirect(base_url() . 'usuarios/create/');
        }
    } // function delete

/* -------------------------------------------------
    ------------------------------------------------
    ------------------------------------------------
    ------------------------------------------------ */

    public function login($ptoVenta)
    {   
        // Si el usuario ya esta loggeado lo redirijo al home
        $logueado = Usuario::getUsuarioLogueado();
        if ($logueado->id) {
            redirect(base_url() . 'usuarios/home/');
        }
        
        // Variables para la vista
        $data['usuario'] = new Usuario();
        $data['msg']     = new PwMsgHandler();
        
        // Punto de venta
        if ($ptoVenta != 0) {
            $data['almacen'] = new Almacen();
            $data['almacen']->where('id',$ptoVenta)->where('punto_de_venta',1)->get();
        }
        
        // Si está posteando, intento loguearme
        if ($this->input->server('REQUEST_METHOD') === 'POST') {
            $this->login_do($data);
        }
        
        // Cargo la vista
        $this->smartyview->render('usuario_login.html',$data);

    } // login

    private function login_do($data)
    {
        // Busco un usuario con los datos posteados
        $data['usuario']->where('username',$this->input->post('username'))
                        ->where('password',sha1($this->input->post('password')))->get();
        
        // Chequeo si se encontró un usuario con esos datos
        if ($data['usuario']->id) {
            if ($data['almacen']->id) {
                $data['usuario']->crearSesion($data['almacen']->id);
            	redirect(base_url() . 'ventas/process/');
            }
        	else {
				$data['usuario']->crearSesion(0);
            	redirect(base_url() . 'usuarios/home/');
            }
        }
        else {
            // Mantengo el nombre de usuario por si se equivocó tipeando la clave
            $data['usuario']->username = $this->input->post('username');
            
            // Cartel de error
            $data['msg']->error = 'Nombre de usuario o contraseña incorrectos';
        }
    } // login_do

    public function logout()
    {
        // deslogueo el usuario
        $this->session->unset_userdata('usuario_id');
        $this->session->unset_userdata('almacen_id');
        
        // mensaje de éxito
        $msg          = new PwMsgHandler();
        $msg->success = 'Cerraste sesión correctamente';
        $msg->persistSuccess();
        
        // Redirijo al login
        redirect(base_url());
    } // logout

    public function browse()
    {
        // chequeo y obtengo el usuario loggeado
        $data['logueado'] = $this->getUsuarioLogueado();

        // valido permisos
        $gruposValidos = array();
        // ej. array('venta','logistica','contable','directivo');
        $this->validarPermisos($data['logueado'], $gruposValidos);

        // Message Handler
        $data['msg'] = new PwMsgHandler();

        // Seleccionar secciones
        $data['sidebar_usuarios_browse'] = 'active';
        
        // get object to show
        $data['usuarios'] = new Usuario();
        $data['usuarios']->get()->all;
        $data['grupos'] = new Grupo();
        $data['grupos']->get()->all;
        
        $this->smartyview->render('usuario_browse.html',$data);
    } // function browse
    
	public function __construct() 
	{
		parent::__construct();
	}

} // class Usuarios

/* End of file usuarios.php */
/* Location: ./application/controllers/usuarios.php */